package data_structures_and_algorithms.bit_arithmetic;

/**
 * @ClassName BasicKnowleage
 * @Description: TODO
 * @Author: yongliang.ma
 * @Create_time:2022/10/13 18:59
 */
public class BasicKnowleage {
    public static void main(String[] args) {

        int num =  2 +   (4 - 2 >> 1);// 两个知识点：1、右移1位等同于除以2；2、需要加括号保证计算优先级
        System.out.println(num);

        int num1 = 9 >> 1 + 1;// 优先级顺序：
        System.out.println(num1);

        int num2 = (9 >> 1) + 1;// 两个知识点：1、右移1位等同于除以2；2、需要加括号保证计算优先级
        System.out.println(num2);


        System.out.println(5 >>> 1);
        System.out.println(5 >> 1);
        System.out.println(-5 >>> 1);
        System.out.println(-5 >> 1);


        // 技巧点：加减一个2的整数次幂的操作。场景：我们需要将小写字母转换为大写，将大写字母转换为小写，这中间
        // 大写 + 65 = 小写，小写 - 65 = 大写
        // 使用位运算 大写 ^ (1<<5) = 小写，小写 ^ (1<<5) = 大写
        // 比如：65 ^ 32 = 97, 而 97 ^ 32 = 65
    }
}
